/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package network;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author ggroff
 */
public class GroupeServeurs extends Thread {

    private List<Serveur> listeServeur;
    private List<Serveur> fileAttenteServeur;
    private static int compteur = 0;
    private int id;
    private int nbServeur;

    public GroupeServeurs() {
        this.listeServeur = Collections.synchronizedList(new ArrayList<Serveur>());
        this.fileAttenteServeur = Collections.synchronizedList(new ArrayList<Serveur>());

        this.nbServeur = 0;

        GroupeServeurs.compteur++;
        this.id = GroupeServeurs.compteur;
        System.out.println("GroupeServeurs{" + id + "}|construct");
    }

    @Override
    public void run() {
        Serveur s = null;

        while (true) {
            for (int i = 0; i < this.listeServeur.size(); i++) {
                s = this.listeServeur.get(i);

                try {
                    if (!s.isClosed()) {
                        try {
                            s.receive();
                        } catch (NoSuchAlgorithmException ex) {
                            Logger.getLogger(GroupeServeurs.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    } else {
                        this.listeServeur.remove(i);
                        this.nbServeur--;
                        System.out.println("GroupeServeurs{" + id + "}|run: delete server");
                    }
                } catch (IOException ex) {
                    this.listeServeur.remove(i);
                    this.nbServeur--;
                    System.out.println("Erreur>>> GroupeServeurs{" + id + "}|run: delete server");
                }
            }


            if (this.fileAttenteServeur.size() > 0) {
                this.listeServeur.addAll(this.fileAttenteServeur);

                for (int i = 0; i < this.fileAttenteServeur.size(); i++) {
                    this.fileAttenteServeur.remove(this.fileAttenteServeur.get(i));
                }
            }

            try {
                this.sleep(200);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

    public void addServer(Serveur element) {
        this.nbServeur++;

        System.out.println("GroupeServeurs{" + id + "}|addServer: add server");
        System.out.println("Serveurs sur Groupe{" + this.id + "} : " + this.getSize());

        this.fileAttenteServeur.add(element);
    }

    public void deleteServer(Serveur element) {
        this.listeServeur.remove(element);
    }

    public int getSize() {
        return this.nbServeur;
    }

    public int getIdGroupeServeur() {
        return this.id;
    }
}
